Home - Programmieren - PHP - PHP: Herkunft einer IP-Adresse ermitteln
Hinweis: Für den hier dargestellte Inhalt ist nicht der Betreiber der Plattform, sondern der jeweilige Autor verantwortlich. Falls Sie Missbrauch vermuten, bitten wir Sie, uns unter missbrauch@it-academy.cc zu kontaktieren. [Druckansicht] [Als E-Mail senden] [Kommentar verfassen] Zu Beginn des Artikels wollen wir gleich klären, wozu man überhaupt diese Funktion braucht. Nun: die Gründe können verschieden sein; zum Beispiel lassen sich folgende Dinge später leicht realisieren: automatische Auswahl der Währung in internationalen Online-Shops, Besucherstatistiken, Spam Filter, Blockierung von Inhalten für bestimmte Herkunftsländer, ... Das Wichtigste ist natürlich die IP-Adresse selbst. Diese Adressen wurden den verschiedenen Ländern in verschiedenen Intervallen zugeteilt. Somit gibt es für alle Länder (die Internet haben) einen oder mehrere Bereiche, in welchem diese Adressen vergeben können. Trotzdem ist ein Fehler von 2% vorhanden. Das heißt 98 von 100 IP-Adressen werden korrekt zugeordnet. Das Bestimmen des Landes erleichtert uns nun eine Liste, die von http://ip-to-country.webhosting.info bereitgestellt wird. Die Liste ist zip-komprimiert als CSV-Datei verfügbar. CSV ist die Abkürzung für „Comma Separated Values“, was so viel heißt, dass die einzelnen Werte einfach durch Beistriche von einander getrennt gespeichert sind. Die aktuelle Liste ist unter http://ip-to-country.webhosting.info/downloads/ip-to-country.csv.zip downloadbar. Nach dem Download entpacken wir die Liste in irgendein Verzeichnis, von dem wir später dann auch Zugriff haben. Das Suchen von bestimmten Werten erledigen wir später mit einer kleinen mySQL-Tabelle. Doch dazu muss erst der Inhalt der CSV-Datei in eine Tabelle gespeichert werden. Die neue Tabelle hat 5 Felder: Beginn des Bereichs, Ende des Bereichs, 2-stelliger Ländercode, 3-stelliger Ländercode und den ausgeschriebenen Namen des Landes.
CREATE TABLE `IPtoCountry` ( `IP_from` DOUBLE NOT NULL , `IP_to` DOUBLE NOT NULL , `zwei` CHAR( 2 ) NOT NULL , `drei` CHAR( 3 ) NOT NULL , `name` VARCHAR( 50 ) NOT NULL ); Jetzt gibt es zwei Möglichkeiten die Daten in die Tabelle zu speichern: entweder ganz einfach mit phpMyAdmin importieren oder aber, die etwas kompliziertere Methode: dazu erstellen wir ein kleines Skript: import.php
<?php
HINWEIS: Der Pfad zur Datei und die mySQL-Verbindungsdaten müssen natürlich angepasst werden! Im Skript wird die Datei geöffnet und mit der PHP-Funktion fgetcsv() wird uns jede Zeile der Datei als fertig ausgelesenes Array zurückgegeben. Vielleicht ist manchen schon aufgefallen, dass die Felder der IP-Adressen nicht mit direkt ersichtlichen IP-Adressen befüllt sind. Das liegt daran, dass man schwer nach einer IP-Adresse suchen kann, die zum Beispiel kleiner als 82.223.54.154 ist. Wie macht man das nun? Eine IP-Adresse besteht aus 4 Bytes, die jeweils durch die Punkte getrennt sind. Behandelt man nun diese 4 Bytes als eine große Double-Zahl, so kommt man auf die Daten der Liste. Die Formel zur Berechnung der IP-Adresse A.B.C.D lautet: Double = A*256*256*256+B*256*256+C*256+D Auch daran wurde bei der Entwicklung von PHP gedacht und es gibt die Funktion IP2Long, die die Berechnung für uns übernehmen wird. Jetzt kommt die Funtkion, die die Länder aus der Tabelle ausliest: iptocountry.php
<?php
Hier werden nur die ausgeschriebenen Namen der Länder ausgelesen. Möglich wären auch alle anderen Angaben. Und so wird diese Funktion eingesetzt: demo.php
<?php
Eine mögliche Erweiterung wäre: die Nationalflaggen unter dem 3-stelligen Code abspeichern und dann einen IMG-Tag einbinden: // $drei = dreistelliger Ländercode
Es lässt sich selbsverständlich noch viel Anderes damit machen; also frohes Schaffen!
|
![]() ![]() ![]()
Autoren:03238
Artikel:00828 Glossar:04616 News:03460 Userbeiträge:15895 Queueeinträge:00001 ![]()
VeriFone Introduces VX810 Duet with Innovative Dual-User Design for Merchant and Customer Use
Ab sofort werden NTP Software QFS, NTP Software Storage M&A und NTP Software Storage Billing System von EMC angeboten Deutliche Preisnachlässe beim IT-Outsourcing erreichen [Mehr News] ![]()
Virtualisieren Sie schon?
![]() |